package com.dom4j.demo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.net.MalformedURLException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * dom4j框架学习 使用dom4j框架创建xml文档并输出保存
 * 
 */
public class Dom4JWriteXML {

	/*
	 * 创建 Document 对象
	 */
	public static Document createDocument() throws MalformedURLException, DocumentException {
		Document document = DocumentHelper.createDocument();
		return document;
	}

	/*
	 * 创建根对象
	 * 
	 * @param document Document 对象
	 * 
	 * @param name 需要创建的 element 的名称
	 * 
	 * @return 创建的根 element 对象
	 * 
	 */
	public static Element createRootElement(Document document, String name) {
		Element root = DocumentHelper.createElement(name);
		document.setRootElement(root);
		return root;
	}

	/*
	 * 创建一个 xml 文件的 demo
	 * 
	 * */
	public static Element createStudentInfoDemo(Element root){
        //给根元素添加属性
        root.addAttribute("grade", "3")
        	.addAttribute("classnum", "2");
        
        //添加子节点, 每一个子节点就是一个同学
        Element student1 = root.addElement("student")
        					   .addAttribute("gender", "girl");
        
        Element student2 = root.addElement("student")
        					   .addAttribute("gender", "boy");

        //为每个同学添加信息节点并设置值
        student1.addElement("name").setText("zhangsan");
        student1.addElement("age").setText("12");;
        
        
        student2.addElement("name").setText("lisi");
        student2.addElement("age").setText("11");;
        
        return root;
	}

	public static void writeToFile(Document document, String file) throws Exception{

		// 两种输出方式
		// 1)输出到控制台
		XMLWriter xmlWriter = new XMLWriter();
		xmlWriter.write(document);

		// 2)输出到文件
		OutputFormat format = new OutputFormat("    ", true);// 设置缩进为4个空格，并且另起一行为true
		XMLWriter xmlWriter2 = new XMLWriter(new FileOutputStream(file), format);
		xmlWriter2.write(document);
	}
}